#pragma once
#include "CaelumInternal.h"
#include "CaelumExternal.h"

namespace Caelum {

struct WindowParams
{
	int X;
	int Y;
	int Width;
	int Height;
	std::wstring Title;
	bool Fullscreen;
	bool IsGameWindow;

	static int OSDefaultPos;
	static WindowParams BasicGameWindow;
};

class Window
{
private:
	
protected:
	unsigned long mWindowPtr;

	WindowParams mWindowParams;
public:
	Window() { }
	virtual ~Window() { }

	virtual void Initialize(WindowParams &wp);

	void Show();
	void Hide();

	void MoveTo(uint X, uint Y);
	void Resize(uint Width, uint Height);

	void GetPosition(uint &X, uint &Y);
	void GetTotalSize(uint &Width, uint &Height);
	void GetClientSize(uint &Width, uint &Height);

	bool ProcessMessages();

	inline unsigned long GetWindowPointer() { return mWindowPtr; }

	virtual void Resizing(int NewW, int NewH) { }
};

}